/**
 * @file proxysdlib.c
 * @brief Sorgente di interfacciamento con le chiamate a sistema per le librerie dinamiche.
 *
 * Si differenzia tra sistema linux e sistema windows.
 *
 * @date Feb 24, 2012
 * @author: Francesco Corvino
 */
#include "proxysdlib.h"

/**
 * @brief Effettua la chiamata di sistema per caricare la libreria
 *
 * @param path string of path to library to load: example <code>'./foo.so.1'</code>
 * @return pointer to the library loaded, if it has error the function return NULL
 *
 */
HANDLER_LIB loadLibrary(char *path){

#ifdef SO_POSIX_PLATFORM
    return dlopen(path, RTLD_LAZY);
#else
    return LoadLibrary(path);
#endif

}

/**
 * @brief Restituisce il puntatore a una funzione della libreria invocata tramite il nome
 *
 * @param lib pointer to the space of library in memory
 * @param namefn string of the function to get the poiter
 * @return pointer to the function, you must to do the casting.
 */
HANDLER_FUN getFunct(void* lib, char* namefn) {

	#ifdef SO_POSIX_PLATFORM
		return dlsym(lib, namefn);
	#else
		return GetProcAddress(lib,namefn);
	#endif

}

/**
 * @brief Libera la memoria occupata dalla libreria
 *
 * @param lib puntatore alla memoria occupata dalla libreria
 */
void closeLibrary(void * lib){
	#ifdef SO_POSIX_PLATFORM
		dlclose(lib);
	#else
		FreeLibrary(lib);
	#endif
}
